import axios from 'axios';
import { ElMessage } from 'element-plus';

// 创建axios实例
const request = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL || '',
  timeout: 15000
});

// 调试信息
console.log('API 基础URL:', import.meta.env.VITE_API_BASE_URL);

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 调试请求信息
    console.log('发起请求:', config.method.toUpperCase(), config.url, config.data || config.params);
    return config;
  },
  error => {
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  response => {
    const res = response.data;

    // 调试响应信息
    console.log('响应数据:', res);

    // 请求成功
    if (res.code === 200) {
      return res;
    }

    // 错误处理
    ElMessage.error(res.message || '请求错误');
    return Promise.reject(new Error(res.message || '请求错误'));
  },
  error => {
    let message = '网络错误，请稍后重试';

    if (error.response) {
      // 服务器返回了错误响应
      console.error('服务器响应错误:', error.response.status, error.response.data);

      switch (error.response.status) {
        case 400:
          message = error.response.data?.message || '请求参数错误';
          break;
        case 401:
          message = '未授权，请重新登录';
          // 清除用户信息并跳转到登录页
          localStorage.removeItem('userInfo');
          setTimeout(() => {
            window.location.href = '/login';
          }, 1000);
          break;
        case 403:
          message = '拒绝访问';
          break;
        case 404:
          message = '请求的资源不存在';
          break;
        case 500:
          message = error.response.data?.message || '服务器内部错误';
          break;
        default:
          message = `请求错误: ${error.response.status}`;
      }
    } else if (error.request) {
      // 请求发出但没有收到响应
      console.error('无响应错误:', error.request);
      message = '服务器无响应，请检查网络连接';
    } else {
      // 设置请求时发生的错误
      console.error('请求配置错误:', error.message);
      message = error.message;
    }

    ElMessage.error(message);
    return Promise.reject(error);
  }
);

export default request;
